You can interact with this notebook online: Launch notebook

Montecarlo Packet Visualization

RPacketPlotter plots the RPackets that are generated by the Montecarlo method and creates an animated plot that contains the packet trajectories as they move away from the photosphere. The properties of individual RPackets are taken from the rpacket_tracker.

RPacketPlotter uses the properties (specifically, mu and r) present in the rpacket_tracker to calculate the coordinates of packets as they move through the ejecta. In the following section, the mathematical expression for getting the angle(θ) of packets with respect to the x-axis is shown, which can be used (along with radius r) to calculate the x and y coordinates of packets.

Getting packet coordinates


4ebc187ba23742a0b102c66a0043b00e

The diagram above shows the packet trajectory as it starts from photosphere P0 and continues to move along the subsequent points P1, P2, and so on.

Note

Here μ represents the direction of packet propagation with respect to the radial line.

To determine the polar coordinates of any arbitrary point, say P2, we need r2 and θ2. r2 is already present in the array obtained from the simulation. To determine θ2, we use the sine rule and apply it to the triangle OP1P2, where O is the center.

\[\frac{r_{2}}{\sin(\pi - \mu_{1})} = \frac{r_{1}}{\sin(\alpha)}\]

Now, writing α in terms of μ1 and θ2

\[α = μ_{1} - θ_{2}\]
\[\frac{r_{2}}{\sin(\pi - \mu_{1})} = \frac{r_{1}}{\sin(μ_{1} - θ_{2})}\]

Thus,

\[θ_{2} = -\sin^{-1}(\frac{r1}{r2}\sin(\mu_{1})) + \mu_{1}\]

Hence, for i-th point, θ will be:

\[θ_{i} = -\sin^{-1}(\frac{r_{i-1}}{r_{i}}\sin(\mu_{i-1})) + \mu_{i-1}\]

Running the simulation

[1]:
from tardis import run_tardis
from tardis.io.config_reader import Configuration
/usr/share/miniconda3/envs/tardis/lib/python3.8/site-packages/setuptools_scm/git.py:135: UserWarning: "/home/runner/work/tardis/tardis" is shallow and may cause errors
  warnings.warn(f'"{wd.path}" is shallow and may cause errors')
[2]:
# Reading the Configuration stored in `tardis_example.yml` into config

config = Configuration.from_yaml("tardis_example.yml")
[3]:
# changing config file for enabling the rpacket_tracking

config["montecarlo"]["tracking"]["track_rpacket"]=True
[4]:
sim = run_tardis(config, show_progress_bars=False)
[tardis.plasma.standard_plasmas][INFO   ]

        Reading Atomic Data from kurucz_cd23_chianti_H_He.h5 (standard_plasmas.py:93)
[tardis.io.atom_data.util][INFO   ]

        Atom Data kurucz_cd23_chianti_H_He.h5 not found in local path.
        Exists in TARDIS Data repo /home/runner/Downloads/tardis-data/kurucz_cd23_chianti_H_He.h5 (util.py:33)
[tardis.io.atom_data.base][INFO   ]
        Reading Atom Data with: UUID = 6f7b09e887a311e7a06b246e96350010 MD5  = 864f1753714343c41f99cb065710cace  (base.py:249)
[tardis.io.atom_data.base][INFO   ]
        Non provided Atomic Data: synpp_refs, photoionization_data, yg_data, two_photon_data (base.py:253)
[py.warnings         ][WARNING]
        /home/runner/work/tardis/tardis/tardis/plasma/properties/radiative_properties.py:93: RuntimeWarning: invalid value encountered in true_divide
  (g_lower * n_upper) / (g_upper * n_lower)
 (warnings.py:109)
[py.warnings         ][WARNING]
        /home/runner/work/tardis/tardis/tardis/plasma/properties/radiative_properties.py:93: RuntimeWarning: invalid value encountered in true_divide
  (g_lower * n_upper) / (g_upper * n_lower)
 (warnings.py:109)
[tardis.simulation.base][INFO   ]

        Starting iteration 1 of 20 (base.py:381)
[tardis.simulation.base][INFO   ]

        Luminosity emitted   = 7.942e+42 erg / s
        Luminosity absorbed  = 2.659e+42 erg / s
        Luminosity requested = 1.059e+43 erg / s
 (base.py:555)
[tardis.simulation.base][INFO   ]

        Plasma stratification: (base.py:523)
Shell No. t_rad next_t_rad w next_w
0 9.93e+03 1.01e+04 0.4 0.507
5 9.85e+03 1.02e+04 0.211 0.197
10 9.78e+03 1.01e+04 0.143 0.117
15 9.71e+03 9.87e+03 0.105 0.0869
[tardis.simulation.base][INFO   ]

        Current t_inner = 9933.952 K
        Expected t_inner for next iteration = 10703.212 K
 (base.py:550)
[py.warnings         ][WARNING]
        /home/runner/work/tardis/tardis/tardis/plasma/properties/radiative_properties.py:93: RuntimeWarning: invalid value encountered in true_divide
  (g_lower * n_upper) / (g_upper * n_lower)
 (warnings.py:109)
[tardis.simulation.base][INFO   ]

        Starting iteration 2 of 20 (base.py:381)
[tardis.simulation.base][INFO   ]

        Luminosity emitted   = 1.071e+43 erg / s
        Luminosity absorbed  = 3.576e+42 erg / s
        Luminosity requested = 1.059e+43 erg / s
 (base.py:555)
[tardis.simulation.base][INFO   ]

        Plasma stratification: (base.py:523)
Shell No. t_rad next_t_rad w next_w
0 1.01e+04 1.08e+04 0.507 0.525
5 1.02e+04 1.1e+04 0.197 0.203
10 1.01e+04 1.08e+04 0.117 0.125
15 9.87e+03 1.05e+04 0.0869 0.0933
[tardis.simulation.base][INFO   ]

        Current t_inner = 10703.212 K
        Expected t_inner for next iteration = 10673.712 K
 (base.py:550)
[tardis.simulation.base][INFO   ]

        Starting iteration 3 of 20 (base.py:381)
[tardis.simulation.base][INFO   ]

        Luminosity emitted   = 1.074e+43 erg / s
        Luminosity absorbed  = 3.391e+42 erg / s
        Luminosity requested = 1.059e+43 erg / s
 (base.py:555)
[tardis.simulation.base][INFO   ]

        Plasma stratification: (base.py:523)
Shell No. t_rad next_t_rad w next_w
0 1.08e+04 1.1e+04 0.525 0.483
5 1.1e+04 1.12e+04 0.203 0.189
10 1.08e+04 1.1e+04 0.125 0.118
15 1.05e+04 1.06e+04 0.0933 0.0895
[tardis.simulation.base][INFO   ]

        Current t_inner = 10673.712 K
        Expected t_inner for next iteration = 10635.953 K
 (base.py:550)
[tardis.simulation.base][INFO   ]

        Starting iteration 4 of 20 (base.py:381)
[tardis.simulation.base][INFO   ]

        Luminosity emitted   = 1.058e+43 erg / s
        Luminosity absorbed  = 3.352e+42 erg / s
        Luminosity requested = 1.059e+43 erg / s
 (base.py:555)
[tardis.simulation.base][INFO   ]

        Plasma stratification: (base.py:523)
Shell No. t_rad next_t_rad w next_w
0 1.1e+04 1.1e+04 0.483 0.469
5 1.12e+04 1.12e+04 0.189 0.182
10 1.1e+04 1.1e+04 0.118 0.113
15 1.06e+04 1.07e+04 0.0895 0.0861
[tardis.simulation.base][INFO   ]

        Current t_inner = 10635.953 K
        Expected t_inner for next iteration = 10638.407 K
 (base.py:550)
[tardis.simulation.base][INFO   ]

        Starting iteration 5 of 20 (base.py:381)
[tardis.simulation.base][INFO   ]

        Luminosity emitted   = 1.055e+43 erg / s
        Luminosity absorbed  = 3.399e+42 erg / s
        Luminosity requested = 1.059e+43 erg / s
 (base.py:555)
[tardis.simulation.base][INFO   ]
        Iteration converged 1/4 consecutive times. (base.py:262)
[tardis.simulation.base][INFO   ]

        Plasma stratification: (base.py:523)
Shell No. t_rad next_t_rad w next_w
0 1.1e+04 1.1e+04 0.469 0.479
5 1.12e+04 1.13e+04 0.182 0.178
10 1.1e+04 1.1e+04 0.113 0.113
15 1.07e+04 1.07e+04 0.0861 0.0839
[tardis.simulation.base][INFO   ]

        Current t_inner = 10638.407 K
        Expected t_inner for next iteration = 10650.202 K
 (base.py:550)
[tardis.simulation.base][INFO   ]

        Starting iteration 6 of 20 (base.py:381)
[tardis.simulation.base][INFO   ]

        Luminosity emitted   = 1.061e+43 erg / s
        Luminosity absorbed  = 3.398e+42 erg / s
        Luminosity requested = 1.059e+43 erg / s
 (base.py:555)
[tardis.simulation.base][INFO   ]
        Iteration converged 2/4 consecutive times. (base.py:262)
[tardis.simulation.base][INFO   ]

        Plasma stratification: (base.py:523)
Shell No. t_rad next_t_rad w next_w
0 1.1e+04 1.1e+04 0.479 0.47
5 1.13e+04 1.12e+04 0.178 0.185
10 1.1e+04 1.11e+04 0.113 0.112
15 1.07e+04 1.07e+04 0.0839 0.0856
[tardis.simulation.base][INFO   ]

        Current t_inner = 10650.202 K
        Expected t_inner for next iteration = 10645.955 K
 (base.py:550)
[tardis.simulation.base][INFO   ]

        Starting iteration 7 of 20 (base.py:381)
[tardis.simulation.base][INFO   ]

        Luminosity emitted   = 1.061e+43 erg / s
        Luminosity absorbed  = 3.382e+42 erg / s
        Luminosity requested = 1.059e+43 erg / s
 (base.py:555)
[tardis.simulation.base][INFO   ]
        Iteration converged 3/4 consecutive times. (base.py:262)
[tardis.simulation.base][INFO   ]

        Plasma stratification: (base.py:523)
Shell No. t_rad next_t_rad w next_w
0 1.1e+04 1.1e+04 0.47 0.47
5 1.12e+04 1.13e+04 0.185 0.178
10 1.11e+04 1.11e+04 0.112 0.112
15 1.07e+04 1.07e+04 0.0856 0.086
[tardis.simulation.base][INFO   ]

        Current t_inner = 10645.955 K
        Expected t_inner for next iteration = 10642.050 K
 (base.py:550)
[tardis.simulation.base][INFO   ]

        Starting iteration 8 of 20 (base.py:381)
[tardis.simulation.base][INFO   ]

        Luminosity emitted   = 1.062e+43 erg / s
        Luminosity absorbed  = 3.350e+42 erg / s
        Luminosity requested = 1.059e+43 erg / s
 (base.py:555)
[tardis.simulation.base][INFO   ]
        Iteration converged 4/4 consecutive times. (base.py:262)
[tardis.simulation.base][INFO   ]

        Plasma stratification: (base.py:523)
Shell No. t_rad next_t_rad w next_w
0 1.1e+04 1.11e+04 0.47 0.472
5 1.13e+04 1.14e+04 0.178 0.175
10 1.11e+04 1.11e+04 0.112 0.111
15 1.07e+04 1.07e+04 0.086 0.084
[tardis.simulation.base][INFO   ]

        Current t_inner = 10642.050 K
        Expected t_inner for next iteration = 10636.106 K
 (base.py:550)
[tardis.simulation.base][INFO   ]

        Starting iteration 9 of 20 (base.py:381)
[tardis.simulation.base][INFO   ]

        Luminosity emitted   = 1.052e+43 erg / s
        Luminosity absorbed  = 3.411e+42 erg / s
        Luminosity requested = 1.059e+43 erg / s
 (base.py:555)
[tardis.simulation.base][INFO   ]
        Iteration converged 5/4 consecutive times. (base.py:262)
[tardis.simulation.base][INFO   ]

        Plasma stratification: (base.py:523)
Shell No. t_rad next_t_rad w next_w
0 1.11e+04 1.11e+04 0.472 0.469
5 1.14e+04 1.15e+04 0.175 0.17
10 1.11e+04 1.11e+04 0.111 0.109
15 1.07e+04 1.08e+04 0.084 0.0822
[tardis.simulation.base][INFO   ]

        Current t_inner = 10636.106 K
        Expected t_inner for next iteration = 10654.313 K
 (base.py:550)
[tardis.simulation.base][INFO   ]

        Starting iteration 10 of 20 (base.py:381)
[tardis.simulation.base][INFO   ]

        Luminosity emitted   = 1.070e+43 erg / s
        Luminosity absorbed  = 3.335e+42 erg / s
        Luminosity requested = 1.059e+43 erg / s
 (base.py:555)
[tardis.simulation.base][INFO   ]

        Plasma stratification: (base.py:523)
Shell No. t_rad next_t_rad w next_w
0 1.11e+04 1.1e+04 0.469 0.475
5 1.15e+04 1.14e+04 0.17 0.177
10 1.11e+04 1.11e+04 0.109 0.112
15 1.08e+04 1.06e+04 0.0822 0.0878
[tardis.simulation.base][INFO   ]

        Current t_inner = 10654.313 K
        Expected t_inner for next iteration = 10628.190 K
 (base.py:550)
[tardis.simulation.base][INFO   ]

        Starting iteration 11 of 20 (base.py:381)
[tardis.simulation.base][INFO   ]

        Luminosity emitted   = 1.053e+43 erg / s
        Luminosity absorbed  = 3.363e+42 erg / s
        Luminosity requested = 1.059e+43 erg / s
 (base.py:555)
[tardis.simulation.base][INFO   ]
        Iteration converged 1/4 consecutive times. (base.py:262)
[tardis.simulation.base][INFO   ]

        Plasma stratification: (base.py:523)
Shell No. t_rad next_t_rad w next_w
0 1.1e+04 1.1e+04 0.475 0.472
5 1.14e+04 1.12e+04 0.177 0.184
10 1.11e+04 1.1e+04 0.112 0.114
15 1.06e+04 1.06e+04 0.0878 0.0859
[tardis.simulation.base][INFO   ]

        Current t_inner = 10628.190 K
        Expected t_inner for next iteration = 10644.054 K
 (base.py:550)
[tardis.simulation.base][INFO   ]

        Starting iteration 12 of 20 (base.py:381)
[tardis.simulation.base][INFO   ]

        Luminosity emitted   = 1.056e+43 erg / s
        Luminosity absorbed  = 3.420e+42 erg / s
        Luminosity requested = 1.059e+43 erg / s
 (base.py:555)
[tardis.simulation.base][INFO   ]

        Plasma stratification: (base.py:523)
Shell No. t_rad next_t_rad w next_w
0 1.1e+04 1.11e+04 0.472 0.467
5 1.12e+04 1.13e+04 0.184 0.176
10 1.1e+04 1.11e+04 0.114 0.11
15 1.06e+04 1.08e+04 0.0859 0.0821
[tardis.simulation.base][INFO   ]

        Current t_inner = 10644.054 K
        Expected t_inner for next iteration = 10653.543 K
 (base.py:550)
[tardis.simulation.base][INFO   ]

        Starting iteration 13 of 20 (base.py:381)
[tardis.simulation.base][INFO   ]

        Luminosity emitted   = 1.062e+43 erg / s
        Luminosity absorbed  = 3.406e+42 erg / s
        Luminosity requested = 1.059e+43 erg / s
 (base.py:555)
[tardis.simulation.base][INFO   ]
        Iteration converged 1/4 consecutive times. (base.py:262)
[tardis.simulation.base][INFO   ]

        Plasma stratification: (base.py:523)
Shell No. t_rad next_t_rad w next_w
0 1.11e+04 1.11e+04 0.467 0.466
5 1.13e+04 1.13e+04 0.176 0.18
10 1.11e+04 1.11e+04 0.11 0.111
15 1.08e+04 1.08e+04 0.0821 0.0841
[tardis.simulation.base][INFO   ]

        Current t_inner = 10653.543 K
        Expected t_inner for next iteration = 10647.277 K
 (base.py:550)
[tardis.simulation.base][INFO   ]

        Starting iteration 14 of 20 (base.py:381)
[tardis.simulation.base][INFO   ]

        Luminosity emitted   = 1.063e+43 erg / s
        Luminosity absorbed  = 3.369e+42 erg / s
        Luminosity requested = 1.059e+43 erg / s
 (base.py:555)
[tardis.simulation.base][INFO   ]
        Iteration converged 2/4 consecutive times. (base.py:262)
[tardis.simulation.base][INFO   ]

        Plasma stratification: (base.py:523)
Shell No. t_rad next_t_rad w next_w
0 1.11e+04 1.11e+04 0.466 0.469
5 1.13e+04 1.13e+04 0.18 0.182
10 1.11e+04 1.1e+04 0.111 0.113
15 1.08e+04 1.07e+04 0.0841 0.0854
[tardis.simulation.base][INFO   ]

        Current t_inner = 10647.277 K
        Expected t_inner for next iteration = 10638.875 K
 (base.py:550)
[tardis.simulation.base][INFO   ]

        Starting iteration 15 of 20 (base.py:381)
[tardis.simulation.base][INFO   ]

        Luminosity emitted   = 1.053e+43 erg / s
        Luminosity absorbed  = 3.417e+42 erg / s
        Luminosity requested = 1.059e+43 erg / s
 (base.py:555)
[tardis.simulation.base][INFO   ]
        Iteration converged 3/4 consecutive times. (base.py:262)
[tardis.simulation.base][INFO   ]

        Plasma stratification: (base.py:523)
Shell No. t_rad next_t_rad w next_w
0 1.11e+04 1.1e+04 0.469 0.484
5 1.13e+04 1.13e+04 0.182 0.181
10 1.1e+04 1.1e+04 0.113 0.113
15 1.07e+04 1.07e+04 0.0854 0.0858
[tardis.simulation.base][INFO   ]

        Current t_inner = 10638.875 K
        Expected t_inner for next iteration = 10655.125 K
 (base.py:550)
[tardis.simulation.base][INFO   ]

        Starting iteration 16 of 20 (base.py:381)
[tardis.simulation.base][INFO   ]

        Luminosity emitted   = 1.059e+43 erg / s
        Luminosity absorbed  = 3.445e+42 erg / s
        Luminosity requested = 1.059e+43 erg / s
 (base.py:555)
[tardis.simulation.base][INFO   ]
        Iteration converged 4/4 consecutive times. (base.py:262)
[tardis.simulation.base][INFO   ]

        Plasma stratification: (base.py:523)
Shell No. t_rad next_t_rad w next_w
0 1.1e+04 1.1e+04 0.484 0.472
5 1.13e+04 1.13e+04 0.181 0.177
10 1.1e+04 1.1e+04 0.113 0.113
15 1.07e+04 1.06e+04 0.0858 0.0858
[tardis.simulation.base][INFO   ]

        Current t_inner = 10655.125 K
        Expected t_inner for next iteration = 10655.561 K
 (base.py:550)
[tardis.simulation.base][INFO   ]

        Starting iteration 17 of 20 (base.py:381)
[tardis.simulation.base][INFO   ]

        Luminosity emitted   = 1.067e+43 erg / s
        Luminosity absorbed  = 3.372e+42 erg / s
        Luminosity requested = 1.059e+43 erg / s
 (base.py:555)
[tardis.simulation.base][INFO   ]

        Plasma stratification: (base.py:523)
Shell No. t_rad next_t_rad w next_w
0 1.1e+04 1.11e+04 0.472 0.468
5 1.13e+04 1.14e+04 0.177 0.175
10 1.1e+04 1.11e+04 0.113 0.11
15 1.06e+04 1.08e+04 0.0858 0.0816
[tardis.simulation.base][INFO   ]

        Current t_inner = 10655.561 K
        Expected t_inner for next iteration = 10636.536 K
 (base.py:550)
[tardis.simulation.base][INFO   ]

        Starting iteration 18 of 20 (base.py:381)
[tardis.simulation.base][INFO   ]

        Luminosity emitted   = 1.057e+43 erg / s
        Luminosity absorbed  = 3.365e+42 erg / s
        Luminosity requested = 1.059e+43 erg / s
 (base.py:555)
[tardis.simulation.base][INFO   ]
        Iteration converged 1/4 consecutive times. (base.py:262)
[tardis.simulation.base][INFO   ]

        Plasma stratification: (base.py:523)
Shell No. t_rad next_t_rad w next_w
0 1.11e+04 1.11e+04 0.468 0.464
5 1.14e+04 1.13e+04 0.175 0.177
10 1.11e+04 1.1e+04 0.11 0.113
15 1.08e+04 1.07e+04 0.0816 0.0848
[tardis.simulation.base][INFO   ]

        Current t_inner = 10636.536 K
        Expected t_inner for next iteration = 10641.692 K
 (base.py:550)
[tardis.simulation.base][INFO   ]

        Starting iteration 19 of 20 (base.py:381)
[tardis.simulation.base][INFO   ]

        Luminosity emitted   = 1.056e+43 erg / s
        Luminosity absorbed  = 3.405e+42 erg / s
        Luminosity requested = 1.059e+43 erg / s
 (base.py:555)
[tardis.simulation.base][INFO   ]
        Iteration converged 2/4 consecutive times. (base.py:262)
[tardis.simulation.base][INFO   ]

        Plasma stratification: (base.py:523)
Shell No. t_rad next_t_rad w next_w
0 1.11e+04 1.11e+04 0.464 0.466
5 1.13e+04 1.13e+04 0.177 0.177
10 1.1e+04 1.11e+04 0.113 0.111
15 1.07e+04 1.07e+04 0.0848 0.0853
[tardis.simulation.base][INFO   ]

        Current t_inner = 10641.692 K
        Expected t_inner for next iteration = 10650.463 K
 (base.py:550)
[tardis.simulation.base][INFO   ]

        Starting iteration 20 of 20 (base.py:381)
[tardis.simulation.base][INFO   ]

        Luminosity emitted   = 1.061e+43 erg / s
        Luminosity absorbed  = 3.401e+42 erg / s
        Luminosity requested = 1.059e+43 erg / s
 (base.py:555)
[tardis.simulation.base][INFO   ]

        Simulation finished in 20 iterations
        Simulation took 52.27 s
 (base.py:476)

Plotting Packets with RPacketPlotter

Importing the RPacketPlotter

[5]:
from tardis.visualization import RPacketPlotter

Now, we create an RPacketPlotter object rpacket_plotter that will be used to generate a plot.

no_of_packets can be specified as a parameter to the from_simulation class method. By default, 15 packets will used to create a plot.

[6]:
rpacket_plotter = RPacketPlotter.from_simulation(sim, no_of_packets=20)

Using the rpacket_plotter we use the generate_plot method to create a plot.

Here the theme parameter can be defined. Currently, we have 2 themes, i.e. light and dark. By Default the light theme will be plotted.

Light Theme

[7]:
rpacket_plotter.generate_plot().show(renderer="notebook_connected")

Dark Theme

[8]:
rpacket_plotter.generate_plot(theme="dark").show(renderer="notebook_connected")

Using Animation and Other interactive features

The Play button at the bottom-left can be used to start the animation. The animation can be paused at any time using the pause button. Also, the timeline slider can be used to reach any point in the animation. A demo is shown below. e3957f0fe446438cbf390ee974afa77b

Hovering over any packet will show its properties like its coordinates, interaction type, etc. The zoom-in feature can be used to view a particular part of the plot. The demo below shows these features. f1395fd5deea4c15bfed67ef3f59558e